package cn.source.system.domain;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * @author bomb
 */
@Getter
@Setter
@ToString
public class PayResultResponse {

    /**
     * 支付类型：AliPay=支付宝、WXPay=微信 WXMpPay=微信公众号 BZPay=余额支付
     */
    private String payType;

    /**
     * 订单id
     */
    private String orderId;

    /**
     * 订单号
     */
    private String orderNo;

    //======================支付宝支付=======================
    /**
     * 支付宝App调用返回body
     */
    private String aliAppPayBody;
    //======================支付宝支付=======================


    //======================微信支付=======================
    /**
     * 微信App支付
     */
    private WxAppPayOrderInfo wxAppPayOrderInfo;

    /**
     * 微信公众号支付
     */
    private WxJsApiPayOrderInfo wxJsApiPayOrderInfo;

    /**
     * H5支付
     */
    private H5PayOrderInfo h5PayOrderInfo;

    @Getter
    @Setter
    /**
     * 微信app预支付数据
     */
    public static class WxAppPayOrderInfo {

        /**
         * appid:AppId
         */
        private String appid;

        /**
         * noncestr:随机字符串，不长于32位
         */
        private String noncestr;

        @JsonIgnore
        /**
         * 对应package：Sign=WXPay
         */
        private String packageStr;

        @JsonProperty(value = "package")
        public String getPackage() {
            return packageStr;
        }

        /**
         * partnerid：微信支付商户号
         */
        private String partnerid;

        /**
         * prepayid： API下单接口返回的prepay_id参数值，提交格式如：prepay_id=***
         */
        private String prepayid;

        /**
         * 时间戳/秒
         */
        private String timestamp;

        /**
         * 签名，使用字段appid、timestamp、noncestr、prepayid计算得出的签名值
         */
        private String sign;
    }

    @Getter
    @Setter
    /**
     * 公众号预支付数据
     */
    public static class WxJsApiPayOrderInfo {
        /**
         * appid
         */
        private String appId;

        /**
         * 时间戳/秒
         */
        private String timeStamp;

        /**
         * 随机字符串，不长于32位
         */
        private String nonceStr;

        @JsonIgnore
        /**
         * 对应package API下单接口返回的prepay_id参数值，提交格式如：prepay_id=***
         */
        private String packageStr;
        @JsonProperty(value = "package")
        public String getPackage() {
            return packageStr;
        }

        /**
         * 签名类型，默认为RSA，仅支持RSA。
         */
        private String signType;

        /**
         * 签名，使用字段appId、timeStamp、nonceStr、package计算得出的签名值
         */
        private String paySign;
    }

    /**
     * 网页支付信息
     */
    @Getter
    @Setter
    public static class H5PayOrderInfo {
        /**
         * h5支付链接
         */
        private String h5Url;
        private String codeUrl;
    }
}

